package com.hoow.shakoow.ai.network

import com.hoow.shakoow.ai.data.*
import okhttp3.MultipartBody
import retrofit2.Call
import retrofit2.http.*

interface ApiAiService {

    /**
     * app-获取APP更新版本
     */
    @POST
    fun getAppVersion(
        @Url targetUrl: String,
        @Body reqAiBase: ReqAiBase
    ): Call<RevAiAppVersion>

    /**
     * app-获取APP配置
     */
    @POST
    fun getAppConfig(
        @Url targetUrl: String,
        @Body reqAiBase: ReqAiBase
    ): Call<RevAppConfig>

    /**
     * 登录-广告id登录
     */
    @POST
    fun loginByAdvertId(
        @Url targetUrl: String,
        @Body reqAiBase: ReqAiBase
    ): Call<RevAiBase>

    /**
     * 用户-获取用户详情
     */
    @POST
    fun getUserInfo(
        @Url targetUrl: String,
        @HeaderMap headerMap: Map<String, String>,
        @Body reqAiBase: ReqAiBase
    ): Call<RevShakeUserInfo>

    /**
     * 用户-获取用户详情 根据id
     */
    @POST
    fun getUserInfoByUserId(
        @Url targetUrl: String,
        @HeaderMap headerMap: Map<String, String>,
        @Body reqAiBase: ReqAiBase
    ): Call<RevShakeUserInfo>

    /**
     * 工具-上传文件
     */
    @Multipart
    @POST
    fun uploadFile(
        @Url targetUrl: String,
        @HeaderMap headerMap: Map<String, String>,
        @QueryMap map: Map<String, String>,
        @Part file: MultipartBody.Part
    ): Call<RevAiFileUpload>

    /**
     * 设置用户昵称与性别
     */
    @POST
    fun setUserName(
        @Url targetUrl: String,
        @HeaderMap headerMap: Map<String, String>,
        @Body reqSetUserName: ReqSetUserName
    ): Call<RevAiBase>

    /**
     * 设置用户头像
     */
    @POST
    fun setUserHeadImg(
        @Url targetUrl: String,
        @HeaderMap headerMap: Map<String, String>,
        @Body reqSetUserHeadImg: ReqSetUserHeadImg
    ): Call<RevAiBase>

    /**
     * 开始摇一摇
     */
    @POST
    fun startShake(
        @Url targetUrl: String,
        @HeaderMap headerMap: Map<String, String>,
        @Body reqAiBase: ReqAiBase
    ): Call<RevStartShake>

    /**
     * 摇一摇返回的用户
     */
    @POST
    fun getShakeUserInfo(
        @Url targetUrl: String,
        @HeaderMap headerMap: Map<String, String>,
        @Body reqGetShakeUserInfo: ReqGetShakeUserInfo
    ): Call<RevShakeUserInfo>

    /**
     * 设置用户签名
     */
    @POST
    fun setUserSignature(
        @Url targetUrl: String,
        @HeaderMap headerMap: Map<String, String>,
        @Body reqSetUserSignature: ReqSetUserSignature
    ): Call<RevAiBase>

    /**
     * 获取用户相册
     */
    @POST
    fun getUserPhotos(
        @Url targetUrl: String,
        @HeaderMap headerMap: Map<String, String>,
        @Body reqAiBase: ReqAiBase
    ): Call<RevUserAblums>

    /**
     * 上传用户相册
     */
    @POST
    fun uploadUserPhotos(
        @Url targetUrl: String,
        @HeaderMap headerMap: Map<String, String>,
        @Body reqUploadUserPhotos: ReqUploadUserPhotos
    ): Call<RevAiBase>

    /**
     * 删除用户相册
     */
    @POST
    fun deleteUserPhotos(
        @Url targetUrl: String,
        @HeaderMap headerMap: Map<String, String>,
        @Body reqDeleteUserPhotos: ReqDeleteUserPhotos
    ): Call<RevAiBase>

    /**
     * 获取打招呼的历史
     */
    @POST
    fun getGreetsHistoryList(
        @Url targetUrl: String,
        @HeaderMap headerMap: Map<String, String>,
        @Body reqAiBase: ReqAiBase
    ): Call<RevGreetHistory>

    /**
     * 获取摇到的历史
     */
    @POST
    fun getShakeHistoryList(
        @Url targetUrl: String,
        @HeaderMap headerMap: Map<String, String>,
        @Body reqAiBase: ReqAiBase
    ): Call<RevShakeHistory>

    /**
     * 获取对话详情
     */
    @POST
    fun getChatInfo(
        @Url targetUrl: String,
        @HeaderMap headerMap: Map<String, String>,
        @Body reqChatInfo: ReqChatInfo
    ): Call<RevChatInfo>

    /**
     * 打招呼
     */
    @POST
    fun toGreet(
        @Url targetUrl: String,
        @HeaderMap headerMap: Map<String, String>,
        @Body reqToGreet: ReqToGreet
    ): Call<RevToGreet>

    /**
     * 回复消息
     */
    @POST
    fun toReply(
        @Url targetUrl: String,
        @HeaderMap headerMap: Map<String, String>,
        @Body reqToReply: ReqToReply
    ): Call<RevReply>

    /**
     * 记录看完广告
     */
    @POST
    fun saveLookedAdvert(
        @Url targetUrl: String,
        @HeaderMap headerMap: Map<String, String>,
        @Body reqLookedAdvert: ReqLookedAdvert
    ): Call<RevAiBase>

    /**
     * 获取用户vip信息
     */
    @POST
    fun getUserVipInfo(
        @Url targetUrl: String,
        @HeaderMap headerMap: Map<String, String>,
        @Body reqAiBase: ReqAiBase
    ): Call<RevUserVipInfo>

    /**
     * 获取商品id
     */
    @POST
    fun getPayOrderId(
        @Url targetUrl: String,
        @HeaderMap headerMap: Map<String, String>,
        @Body reqAiBase: ReqAiBase
    ): Call<RevPayOrderId>

    /**
     * 保存订单支付信息
     */
    @POST
    fun savePayOrderInfo(
        @Url targetUrl: String,
        @HeaderMap headerMap: Map<String, String>,
        @Body reqSavePayOrderInfo: ReqSavePayOrderInfo
    ): Call<RevAiBase>

    /**
     * 订单支付成功
     */
    @POST
    fun payOrderInfoSuccess(
        @Url targetUrl: String,
        @HeaderMap headerMap: Map<String, String>,
        @Body reqSavePayOrderInfo: ReqSavePayOrderInfo
    ): Call<RevAiBase>

    /**
     * 消息-删除招呼记录
     */
    @POST
    fun deleteGreetRecord(
        @Url targetUrl: String,
        @HeaderMap headerMap: Map<String, String>,
        @Body reqDeleteGreetRecord: ReqDeleteGreetRecord
    ): Call<RevAiBase>

    /**
     * 消息-删除摇一摇记录
     */
    @POST
    fun deleteShakeRecord(
        @Url targetUrl: String,
        @HeaderMap headerMap: Map<String, String>,
        @Body reqDeleteShakeRecord: ReqDeleteShakeRecord
    ): Call<RevAiBase>

    /**
     * 消息-阅读打招呼消息
     */
    @POST
    fun readGreetMsg(
        @Url targetUrl: String,
        @HeaderMap headerMap: Map<String, String>,
        @Body reqReadGreetMsg: ReqReadGreetMsg
    ): Call<RevAiBase>

    /**
     * 消息-获取用户是否有新消息
     */
    @POST
    fun getLatestGreetMsg(
        @Url targetUrl: String,
        @HeaderMap headerMap: Map<String, String>,
        @Body reqAiBase: ReqAiBase
    ): Call<RevLastGreetMsg>

    /**
     * 提交反馈
     */
    @POST
    fun submitFeedback(
        @Url targetUrl: String,
        @HeaderMap headerMap: Map<String, String>,
        @Body reqSubmitFeedback: ReqSubmitFeedback
    ): Call<RevAiBase>
}